//注意，参数不能多传，也不能少传 必须按照约定的类型来
// const fn = (name: string, age: number): string => {
//   return name + age
// }
// fn('张三', 18)

//通过?表示该参数为可选参数
// const fn = (name: string, age?: number): string => {
//   return name + age
// }
// fn('张三')

// interface User {
//   name: string
//   age: number
// }
// function getUserInfo(user: User): User {
//   return user
// }

// 定义剩余参数
// const fn = (array: number[], ...items: any[]): any[] => {
//   console.log(array, items)
//   return items
// }

// let a: number[] = [1, 2, 3]

// fn(a, '4', '5', '6')

/* 函数重载
重载是方法名字相同，而参数不同，返回类型可以相同也可以不同。
如果参数类型不同，则参数类型应设置为 any。
参数数量不同你可以将不同的参数设置为可选 */

function fnAAA(params: number): void

function fnAAA(params: string, params2: number): void
function fnAAA(params: string, params2?: number): void

function fnAAA(params: any, params2?: any): void {
  console.log(params)

  console.log(params2)
}

fnAAA(123)

fnAAA('123', 456)
